'use strict'

// 字符串
let st = 'hello world'
console.log(st.length); // 计算字符串长度
console.log(st[0]);  // 获取字符串中某个字符
console.log(st.indexOf('world')); // 搜索指定字符串出现的位置
console.log(st.substring(0, 5));
console.log('---------------------------');

// 数组
console.log('-----------数组篇-----------');
var arr = [1, 2, 'A', 'js', '我', 45, '67']
console.log(arr.length);
console.log(arr.indexOf(2));
console.log('---------------------------');

// slice 作用:截取数组—— 但不会改变原数组
var b = arr.slice(1, 4)  // 从索引1开始到4结束不包括4 [1,4)
console.log(arr);
console.log(b);
console.log('---------------------------');

// push 作用:向数组末尾添加元素 会改变原数组
var c = arr.push({ 'age': 18 })
console.log(arr);
console.log(c);
console.log('---------------------------');

// pop 作用：删除数组的最后一个元素  会改变原数组
var a = arr
console.log(a.pop());
console.log(a);
console.log('---------------------------');

// unshift 向数组开头添加元素   会改变原数组
var arr1 = ['张三', '李四', '王五']
console.log(arr1.unshift(1, 2, 3));
console.log(arr1);
console.log('---------------------------');

// shift  删除数组第一个元素  会改变原数组
arr1.shift()
console.log(arr1);
console.log('---------------------------');

// sort用于数组排序  会改变原数组
var arr2 = [45, 78, 41, 4, 154, 5]
arr2.sort((a, b) => a - b)
console.log(arr2);
console.log('---------------------------');

// reverse 反转  会改变原数组
arr2.reverse()
console.log(arr2);

// splict 万能方法   会改变原数组
// 第一个：开始位置，第二个：删除元素的数量，第三个：插入新元素到开始位置前面
var arr3 = ["孙悟空", "猪八戒", "沙和尚", "唐僧", "白骨精"]
var x = arr3.splice(1, 0, '观音菩萨')
console.log(arr3);

// concat 可以连接若干个数组  不会改变原数组
var arr01 = [1, 2, 3, 4, 5]
var arr02 = ['a', 'b', 'c', 'd', 'e']
var arr_sum = arr01.concat(arr02, 'A', 'B', 'C')
console.log(arr_sum);

// join 将数组连接起来  形成字符串  不会改变原数组
console.log(arr3.join('--'));

console.log('-----------对象篇-----------');

let obj = {
    name: 'js',
    school: '闽西职业技术学院',
    age: 18
}

obj.sex = '男'  // 增加属性
console.log(obj);

delete obj.school  // 删除属性
console.log(obj);

obj.name = 'javascript'// 更改
console.log(obj);

for (var i in obj) {   // 遍历
    console.log(obj[i]);
}
var t = obj.hasOwnProperty('age')  // 判断是否有属性是否为自身
console.log(t);
var f = 'school' in obj  // 有可能是继承的
console.log(f);

// Map 是一个二维数组的方法
var score = new Map([['Pat', 59], ['Bob', 69], ['Tim', 79]])
console.log(score.get('Tim'));
score.set('admin', 89)// 更新，输入相同的数据后，后面的会覆盖前面的数据
console.log(score);
score.delete('Pat') // 删除
console.log(score);

// Set 是一个数组，但是会过滤重复的元素
var se = new Set([1,1,2,3,4,7,7])
console.log(se);
se.delete(7) // 删除
console.log(se);

console.log('-----------函数篇-----------');
